package org.example.leetCode;

import java.util.Arrays;
import java.util.HashMap;

/**
 * 350. 两个数组的交集
 * 给你两个整数数组 nums1 和 nums2 ，
 * 请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数，应与元素在两个数组中都出现的次数一致
 * （如果出现次数不一致，则考虑取较小值）。可以不考虑输出结果的顺序。
 * <p>
 * 排序+双指针
 */
public class Code350_2 {

    public static int[] intersect(int[] nums1, int[] nums2) {
        //对数组排序
        Arrays.sort(nums1);
        Arrays.sort(nums2);
        int m = 0, n = 0;
        int i = 0;
        while (m < nums1.length && n < nums2.length) {
            //交集，记录
            if (nums1[m] == nums2[n]) {
                nums1[i++] = nums1[m];
                m++;
                n++;
            } else if (nums1[m] < nums2[n]) {
                //移动指针，较小元素的指针后移
                m++;
            } else {
                n++;
            }
        }
        int[] result = new int[i];
        System.arraycopy(nums1, 0, result, 0, i);
        return result;

    }

    public static void main(String[] args) {
        int[] nums1 = {1, 3, 4, 4, 13};
        int[] nums2 = {1, 4, 9, 10};
        int[] result = intersect(nums1, nums2);
        for (int i : result) {
            System.out.print(i + " ");
        }
    }


}
